package controler;

import java.awt.Color;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ConnectException;
import java.net.Socket;
import java.net.UnknownHostException;

import vue.*;


public class Joueur {

	private static final int PORT=38660;        		// port du serveur de la salle
	private static final String IP="home.afarno.com";		// adresse IP du serveur de la salle
	
	public static final int DISCONNECTED = 0;
	public static final int CONNECTED = 1;
	public static Socket connexion;    				// la socket de connexion
	public static PrintWriter sortie; 
	public static String name;
	public static Ui ui; 							//chaque Ui implemente un seul joueur
	public static int status = DISCONNECTED;
	public static Joueur joueur = new Joueur();
	public static Color couleur = new Color(33,66,99); // couleur par defaut
	/**
	 * Constructeur de joueur
	 */
	private Joueur(){ //Pas d'instance de joueur
	}
	
	/**
	 * Retourne ce joueur.
	 * @return Joueur
	 * cf design pattern singleton
	 */
	public static Joueur getInstance(){
		return joueur;
	}

	/**
	 * Fonction de connexion au serveur de salle
	 * @param name
	 * @param pass
	 */
	public static void connect(String name, String pass ){
		if (name.equals("")){
			Joueur.ui.statutPanel.setInfo("Le nom ne peux pas etre vide");
			return;
		}
		if (pass.equals("")){
			Joueur.ui.statutPanel.setInfo("Le mot de passe ne peux pas etre vide");
			return;
		}
		try{
			connexion = new Socket(IP, PORT);
		}
		catch(ConnectException e){
			System.err.println("Erreur : connexion impossiblee "+e);
			e.printStackTrace();
			return ;
		}
		catch (UnknownHostException e) {
			System.err.println("Erreur : connexion impossible "+e);
			e.printStackTrace();
			return ;
		}
		catch (IOException e) {
			System.err.println("Erreur : connexion impossible "+e);
			e.printStackTrace();
			return ;
		}
		catch(Exception e){
			e.printStackTrace();
			return;
		}
		try {
			sortie = new PrintWriter(connexion.getOutputStream(), true);
		}
		catch(IOException e) { 
			System.err.println("Erreur : connexion impossible "+e);
			e.printStackTrace();
			return ;
		}
		try {
			Protocol.snd_connect(name, pass);
		} catch (ProtocolException e) {
			e.printStackTrace();
			return;
		}
		Joueur.status = Joueur.CONNECTED;
		new ThreadJoueur().start();
	}
	
	/**
	 * prend une string de la forme xxx,yyy,zzz dans le code rgb
	 * @param couleur
	 * @return Color
	 */
	public static Color stringToColor(String couleur) {
		int r,g,b;
		String[] rgb = couleur.split(",");
		r = Integer.parseInt(rgb[0]);
		g = Integer.parseInt(rgb[1]);
		b = Integer.parseInt(rgb[2]);
		return new Color(r,g,b);
	}

	public static String colorToString(Color couleur) {
		return couleur.getRed()+","+couleur.getGreen()+","+couleur.getBlue();
	}
	
}
